﻿#pragma once
#include "Common.h"
class CentralCache  //单例模式（饿汉模式） //哈希桶映射规则跟threadcache一样，都是208个桶，threadcache的每个哈希桶存的是自由链表，central cache每个哈希桶中存储就是我们上面定义的双链表结构。
{										   //当thread cache的某个桶没有内存了，就可以直接去central cache对应的哈希桶进行申请就行了。
public:
	//提供一个全局访问点
	static CentralCache* GetInstance()
	{
		return &_sInst;
	}
	//获取⼀个⾮空的span
	Span * GetOneSpan(SpanList& list, size_t byte_size);
	// 从中⼼缓存获取⼀定数量的对象给thread cache
	size_t FetchRangeObj(void*& start, void*& end, size_t batchNum, size_t size);

	// 将⼀定数量的对象释放到span跨度
	void ReleaseListToSpans(void* start, size_t size);
private:
	SpanList _spanLists[NFREELISTS];
private:
	CentralCache()//构造函数私有
	{
	}
	
	CentralCache(const CentralCache&) = delete;//防拷贝
	static CentralCache _sInst;  //需要有一个CentralCache类型的静态的成员变量，程序运行起来后我们就立马创建该对象，定义单一实例对象


};